package bbs.model;

import java.util.ArrayList;


/**
 * DB 조회 결과의 페이지 정보들을 나타낸다.
 * 
 * @author sunabove
 * 
 */
public class PageList extends ArrayList<Page> {

	private static final long serialVersionUID = 2254512686533238761L;

	public PageList() {

	}

	public static PageList creatPageList(Entity entity) {

		return creatPageList(entity, 10);
	}

	public static PageList creatPageList(Entity entity, int listPageCnt) {
		PageList pageList = null;
		pageList = new PageList();

		if (entity == null) {
			
			return pageList;
			
		} else if (entity != null) {

			// MAX_PAGE_NO: 2; REC_CNT: 13; PAGE_NO: 1; VIEW_PAGE_NO: 1;

			int maxPageNo = entity.getInteger("MAX_PAGE_NO", 0);
			int currPageNo = entity.getInteger("PAGE_NO", 0);

			int startPageNo = ( ( currPageNo - 1) / listPageCnt) * listPageCnt + 1;
			startPageNo = startPageNo < 1 ? 1 : startPageNo ;

			Page page;
			int pageNo = startPageNo - 1 ;
			pageNo = pageNo < 1 ? 1 : pageNo;
			
			if ( true ) {
				// 첫 페이지 추가
				pageNo = 1 ;
				pageNo = pageNo < 1 ? 1 : pageNo ;
				page = new Page(pageNo, "|<", pageNo < currPageNo );
				page.setTitle( "처음으로" );
				pageList.add(page);
			}

			if ( true ) {
				// 이전 페이지 그룹 추가
				pageNo = startPageNo - 10;
				pageNo = pageNo < 1 ? 1 : pageNo ;
				page = new Page(pageNo, "<<", pageNo < currPageNo );
				page.setTitle( "앞으로" );
				pageList.add(page);
			}
			
			if (pageNo > 0) {
				// 이전 페이지 추가
				pageNo = currPageNo - 1;
				pageNo = pageNo < 1 ? 1 : pageNo ;
				page = new Page(pageNo, "<", pageNo < currPageNo );
				page.setTitle( "앞 페이지" );
				pageList.add(page);
			}

			// 현재 페이지 그룹 추가
			for (int i = 0, iLen = listPageCnt; i < iLen; i++) {
				pageNo = startPageNo + i;
				page = new Page( pageNo );
				page.setEnabledPage( pageNo <= maxPageNo );
				page.setCurrentPage(pageNo == currPageNo);
				
				pageList.add(page);
			} 

			if ( true ) {
				// 다음 페이지 추가.
				pageNo = currPageNo + 1;
				pageNo = pageNo < maxPageNo ? pageNo : maxPageNo ;
				page = new Page( pageNo , ">", currPageNo < pageNo );
				page.setTitle( "뒷 페이지" );
				pageList.add(page);
			}
			
			if ( true ) {
				// 다음 페이지 그룹 추가.
				pageNo = currPageNo + 10;
				pageNo = pageNo < maxPageNo ? pageNo : maxPageNo ;
				page = new Page( pageNo , ">>", currPageNo < pageNo );
				page.setTitle( "뒤로" );
				pageList.add(page);
			}
			
			if ( true ) {
				// 마지막 페이지 그룹 추가.
				pageNo = maxPageNo;
				pageNo = pageNo < maxPageNo ? pageNo : maxPageNo ;
				page = new Page( pageNo , ">|", currPageNo < pageNo );
				page.setTitle( "끝으로" );
				pageList.add(page);
			}

			return pageList;

		}
		
		return pageList;
	}

}
